<?php
namespace app\services\yuql;

use think\facade\Log;
use Yansongda\Pay\Pay;


class PayServices
{
    protected $config = [
        'app_id' => '2021000121694520',
        'notify_url' => 'http://www.day.com/api/yuql/notify',
        'return_url' => 'http://www.day.com/api/yuql/returnPay',
        'ali_public_key' =>'MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAlNGt9wp7eOOkK2SoFAlSCN77nDOTPT+LcdVvfrwVBUs9NlJ4J740ZaTzDuWJwygQ3fN2fUBM92izqw/79BJMpJdVoH4h7V6uZH+LQXPsYW9PyP1vsCCUmyne1td/TddviBkS8iinGJEYDTKLari1GibLuXjHknwBhxCVFaHPwUKLBRpdCW2AG/bSZU6cyiS4xAHP7EtEmCbTtmtMNWDEmL7IUpaDOiMXNx6HMIZw4RP5wnemiDTkdT/rYTwkDvT25cuqYsltqiLYzcERFlsAGq296gLXZ7mGqcD5+NC38J956jxHNAE/gJuQ/oyptZhHHoBnG341F2EQ+qMc81dY9wIDAQAB',
        // 加密方式： **RSA2**
        'private_key' =>'MIIEpQIBAAKCAQEAz2Sx3rRm/bpnfA0VQIg5KgQMOD5vQtYNC76Ts1ShfE9ZMVSXXdFF3SEJmSetda3GfzBz9c+7W2VStQLn3tNhW41PYXdDx7NbNc8ri5kD4Yl4ZlfN1WTWPO+RDkrczSVkDwUiIT0fme2aOMCdI0Bb4CD9wPzVPeMqa4zh+V/Gph5hCWOBm1QiksWxTrmV5tALeR62+N08hwzBmsBgxe+dFmX7Xv5wMjPe6fAqlcgfTzzGBY8XtSl2BStng39965EN4c5MuRhIjslDttptsUplhiVVZgJJgeTLkE/DwMhg1E/N2PpDan34C384RzxbCrZeqtv+e1q0Y5WwM9AFwYsboQIDAQABAoIBAQDEfqYb2BbgfRUBLrAdBTQL/+vH+jeWPpH7t6PfO+cIjXF3UKtdYyLrYRrj9fjdzziLV0/27MuZy4UyJT+lGedbQ6abNNGOSvu3HsMmL2LC9GmTpctKTJDDCUQJI5rR74Q+yuFMVsozIDCHZs87EAY8c2WYzLQJP8r4PXH4wOrIhbdEdcRxtN/uy1LEg73eMdqBBfDy2pWQi2f2R3Qt4hnC2xInJgdErVsHUgf2Col3VG/DUe+27/YFEaR9jYfNnPJDAdb+8K+C/DRU0GTz8YdVs6QNDpEefe6bYWI/Fzq8iNfkIdHIkqPO+4TMak9kmmME8m5Gv9k3zPca7qZfVfeFAoGBAP3Ul6Sys4cdYN2Vy/dw0aHiHwnDPk7e0WQxuS0Jrtj4L88YOIw0giKI1OAdRJBWOjLTErulcbrsnlr2mrxRLEFwbKeTuqgY6Zmx5x2LRif+wpBJkfOrI0XQ7niD/pZ4ZhgTW/AZIsgZtOHkJMNdzmxKSj5bpj2aku6ikd+9XZazAoGBANEqfkJKrPX29ie1pw4LylaHyaewlz7p8SSuYYcV6VJrFTLJGHHdEEDcMakKVCfwbC1fQtqe+LUEyZUecDKgUsx7/CcnEus/AxpTXTBTtDgGHj7AukYTtkh9MBGRuJhDZnQLrNJdqUGGn7Q4IKSWqggKmhtIjKqR0lJAOcbrNE5bAoGBAKsJFSVlRJNGuH6W8VlKK/do5oEtjk6W1YEuABjY7XhFw/FH4NKYjxe2G7rn/ctETvLwRy8py/ioeAvTH3DFQYzWtGA2qw+Zuc5WkeTWc+9/Opr+99m494uTvRx31JSPjDusz8Z5KXar27ZahGsgSnetl1ltaBcakOc7pA+fCfEBAoGBAM9nfGUNmS4YYYOEq47RACUHZl1CTOcUoIoH5CtH/eE8z3tZTkTxuIEoFpIQ7NvhmdLvx+HyipkskxqrYQPCV/ft5V2JcEgWZmQ/T4NxLJ306x68iricKT7966EwRsOs6bWeMhMyzndsH4ZbtXqe7yEkKiVtrhYgnFX025W0elxLAoGAGWkTYjT5IwtTvVwjmgXLhYzGkbsSl9vhV/QPJb8SMiXrFB+9OU8NAMlsJ3V8JzQM4miforCNJvU5+LrZvMBVn1jKaXSxu5Bw82k2nVINhJ6Wos1M3k5ojgJbk3E/l3KacanuJh5plNmswGPzoBYo+/PozY3+bCiCNN3V0OkBbYI=',
    // 使用公钥证书模式，请配置下面两个参数，同时修改ali_public_key为以.crt结尾的支付宝公钥证书路径，如（./cert/alipayCertPublicKey_RSA2.crt）
        // 'app_cert_public_key' => './cert/appCertPublicKey.crt', //应用公钥证书路径
        // 'alipay_root_cert' => './cert/alipayRootCert.crt', //支付宝根证书路径
        'log' => [ // optional
            'file' => './logs/alipay.log',
            'level' => 'info', // 建议生产环境等级调整为 info，开发环境为 debug
            'type' => 'single', // optional, 可选 daily.
            'max_file' => 30, // optional, 当 type 为 daily 时有效，默认 30 天
        ],
        'http' => [ // optional
            'timeout' => 5.0,
            'connect_timeout' => 5.0,
            // 更多配置项请参考 [Guzzle](https://guzzle-cn.readthedocs.io/zh_CN/latest/request-options.html)
        ],
        'mode' => 'dev', // optional,设置此参数，将进入沙箱模式
    ];

    public function index($data)
    {
        $order = [
            'out_trade_no' => $data['order_id'],
            'total_amount' => $data['goods_price'],
            'subject' => '您正在向' . $data['order_id'] . '订单支付',
        ];

        $alipay = Pay::alipay($this->config)->web($order);

        return $alipay->send();// laravel 框架中请直接 `return $alipay`
    }

    public function return()
    {
        $data = Pay::alipay($this->config)->verify(); // 是的，验签就这么简单！

        // 订单号：$data->out_trade_no
        // 支付宝交易号：$data->trade_no
        // 订单总金额：$data->total_amount
       return $data;
    }

    public function notify()
    {
        $alipay = Pay::alipay($this->config);

        try{
            $data = $alipay->verify(); // 是的，验签就这么简单！

            // 请自行对 trade_status 进行判断及其它逻辑进行判断，在支付宝的业务通知中，只有交易通知状态为 TRADE_SUCCESS 或 TRADE_FINISHED 时，支付宝才会认定为买家付款成功。
            // 1、商户需要验证该通知数据中的out_trade_no是否为商户系统中创建的订单号；
            // 2、判断total_amount是否确实为该订单的实际金额（即商户订单创建时的金额）；
            // 3、校验通知中的seller_id（或者seller_email) 是否为out_trade_no这笔单据的对应的操作方（有的时候，一个商户可能有多个seller_id/seller_email）；
            // 4、验证app_id是否为该商户本身。
            // 5、其它业务逻辑情况

            Log::debug('Alipay notify', $data->all());
        } catch (\Exception $e) {
            // $e->getMessage();
        }

        return $alipay->success()->send();// laravel 框架中请直接 `return $alipay->success()`
    }
}














//class PayServices
//{
//    protected $config = [
//        'alipay' => [
//            'default' => [
//                // 必填-支付宝分配的 app_id
//                'app_id' => '2021000121694520',
//                // 必填-应用私钥 字符串或路径
//                'app_secret_cert' => 'MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCsdvG27j0RqCzif7xCFsyg+h/+zdhB2tjh/WTBXvrczUZbkvYfhIS/yw/sGEUzexPVF+sb3xBNnd6P0jSeASKbmJQ0PWqvnGhKoUTGWSCbGSw5FwEOIMJn1NJw36x9RMEXv/xVx3g61+CIUBalfB7LIXAPyJ71BsF9jPk5zQHlm5ihUUMw2QZNggm2nTiBN+39FuwPkLrETaUsJIlutJmuDWjzSzbUpMrKgKPuxdEHqA1qp16ExWcMvgUD9YFK2q607aJYvUx9+hrvA5IiMWKlpkVWiElOoatLZQkSolO5Kr9lboW0TlvtHewkSLDrIWvdn6LM8kBxAFnolKh2cu5PAgMBAAECggEAO7UeL8fBCrjfeTbh1TuRcnXF1/Ap23rJtUuFs1CPpxvGLPPvE7BMSR4jEAjDBHSqxA54zfhm64gpQj9zCfS4p4emX4OXyN5sWNIGPmki2a9YWRd2vQ5oX4wVoxA85k2EUBWeZZAeNrkAOhEIFhinjImyAzTgm1HQcQf6TKGF85heI9rNO1GUUqmHROg6ezF3PUd/NzQ9ENbTzFO1K1oEiaihM/iS+hD4k4sHLKppBhkfTl3oFMpFcMr804HkDM00eMyICKhNjcsGkhxFMNUeno9KnZuZUUpRxE8stixxwJeNRaP4Fmh4ifJnlnUqnkALGLONqS4fST6TslnkRC5TaQKBgQDZ5VShxxZGFQP2algLKRP/qa3/zJ1AAepmkjwfj0EZ4W/3i48z4zuk+1e2I1xKeawSsa4xKZDPLCwP2BRqEvWeff06p/TstH+2YwUyDeQBGbEIEF6wV8Ocly32JnPlGrMSHqs6u4WvohxmXeoBtKSrNYJf/EaiMLH6OAVQIPZu0wKBgQDKn8TKO9GJH4CXnrtoRUl8uFyhT9qNZeEquuepzTodeLlY79gBVWa50znpuZEzPDb5QA/z1sXb+w7MD9U52W49LWTEvUTp3gd4ptCs/o5x7AW+kS5E/1s4GB2QFLsQc1/QmfA8ckL7OWHuBSPU2SWZSCroyoMm7ehuuxGt50RtFQKBgQC2usuun/bd7uHT1HrhYSGUVgfFbSKyeujH+/rPvKMrwRLU1gTRzs5GHUIBTMYo7sCPLNKYB/OYycJpxxvXmO7Ca4XhmtibaQNxQLkqsNt00MbVrGS8Hd29hErXEog+qZVirLWMG5aRI7INZtTHeWZe7hDXzgiuG4gl/rT17a68YQKBgHgaJ40v082RjKlSfwcZOqvgo5dCO+tgHg0z6Ckv6miZrFNZJxHzSwaOe19cjQJviK5JGKuR/Imd0HGIWP0HMl60z2wGPBjbcFZFmp9P66L/IZCJgYGIUst3D97dStw/ZuXAuTM7DxTWOIPbLBf39l9a9YQytXaXwhQQcjRARsDZAoGAdO2hP0YqTDVN0pjaz6Nm7TXU7K6X1uqDYc+cveQteWbqmqIQY+NeM2WWxW2N25wpwpW0ovZuc7Id96dUz7kVMffI45SJOf7W2ds4kkXxl7FrytrjEQ+zskIdCxYbt8aQ0gUzFIx+X/aClCuI4lhw0uG/fiD7zEbWvPfbX2n+iDQ=',
//                // 必填-应用公钥证书 路径
//                'app_public_cert_path' => 'paySrc/appPublicCert.crt',
//                // 必填-支付宝公钥证书 路径
//                'alipay_public_cert_path' => 'paySrc/alipayPublicCert.crt',
//                // 必填-支付宝根证书 路径
//                'alipay_root_cert_path' => 'paySrc/alipayRootCert.crt',
//                'return_url' => 'https://yansongda.cn/alipay/return',
//                'notify_url' => 'https://yansongda.cn/alipay/notify',
//                // 选填-服务商模式下的服务商 id，当 mode 为 Pay::MODE_SERVICE 时使用该参数
//                'service_provider_id' => '',
//                // 选填-默认为正常模式。可选为： MODE_NORMAL, MODE_SANDBOX, MODE_SERVICE
//                'mode' => Pay::MODE_NORMAL,
//            ],
//        ],
//        'logger' => [ // optional
//            'enable' => false,
//            'file' => './logs/alipay.log',
//            'level' => 'info', // 建议生产环境等级调整为 info，开发环境为 debug
//            'type' => 'single', // optional, 可选 daily.
//            'max_file' => 30, // optional, 当 type 为 daily 时有效，默认 30 天
//        ],
//        'http' => [ // optional
//            'timeout' => 5.0,
//            'connect_timeout' => 5.0,
//            // 更多配置项请参考 [Guzzle](https://guzzle-cn.readthedocs.io/zh_CN/latest/request-options.html)
//        ],
//    ];
//
//    public function web($data)
//    {
//        $result = Pay::alipay($this->config)->web([
//            'out_trade_no' => $data['order_id'],
//            'total_amount' => $data['goods_price'],
//            'subject' => 'yansongda 测试 - 1',
//        ]);
//
//        return $result;
//    }
//
//    public function returnCallback()
//    {
//        $data = Pay::alipay($this->config)->callback(); // 是的，验签就这么简单！
//
//        // 订单号：$data->out_trade_no
//        // 支付宝交易号：$data->trade_no
//        // 订单总金额：$data->total_amount
//    }
//
//    public function notifyCallback()
//    {
//        $alipay = Pay::alipay($this->config);
//
//        try{
//            $data = $alipay->callback(); // 是的，验签就这么简单！
//
//            // 请自行对 trade_status 进行判断及其它逻辑进行判断，在支付宝的业务通知中，只有交易通知状态为 TRADE_SUCCESS 或 TRADE_FINISHED 时，支付宝才会认定为买家付款成功。
//            // 1、商户需要验证该通知数据中的out_trade_no是否为商户系统中创建的订单号；
//            // 2、判断total_amount是否确实为该订单的实际金额（即商户订单创建时的金额）；
//            // 3、校验通知中的seller_id（或者seller_email) 是否为out_trade_no这笔单据的对应的操作方（有的时候，一个商户可能有多个seller_id/seller_email）；
//            // 4、验证app_id是否为该商户本身。
//            // 5、其它业务逻辑情况
//        } catch (\Exception $e) {
//            // $e->getMessage();
//        }
//
//        return $alipay->success();
//    }
//}
